██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
CoffeeScript
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwbaCoffeeScriptmwbq è un linguaggio di programmazione che si transcompila in mwbwJavaScript. Esso aggiunge lomwca mwcqzucchero sintatticomwcg ispirato da mwcwRuby, mwdaPython e mwdqHaskellmwdg nel tentativo di accrescere la leggibilità e concisione di JavaScript.cite-ref-thelittlebookoncoffeescript-1-0[1]mwew Specifiche funzionalità aggiuntive includono la mwfacomprensione di listamwfq e la ricerca di corrispondenza.
Il supporto di CoffeeScript è incluso nella versione 3.1 di mwgaRuby on Rails.cite-ref-2[2]mwhq Nel 2011, mwhgBrendan Eich fece riferimento a CoffeeScript come un'influenza nei suoi pensieri sul futuro di JavaScript.cite-ref-3[3]
Contents
• Storia
• Sintassi
• Esempi
• Adozione
• Note
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Storia
Il 13 dicembre 2009 Jeremy Ashkenas fece il suo primo commit Git di CoffeeScript con il commento: "commit iniziale del linguaggio misterioso."cite-ref-4[4] Il compilatore era scritto in Ruby. Il 24 dicembre egli creò la prima release taggata e commentata, 0.1.0. Il 21 febbraio 2010 eseguì il commit della versione 0.5, che sostituì il compilatore Ruby con una versione mwkgself-hostingmwkw in CoffeeScript puro. A quel punto il progetto aveva attratto svariati altri contributori su GitHub, e stava ricevendo più di 300 visualizzazioni di pagina al giorno.
Il 24 dicembre 2010 Ashkenas annunciò il rilascio della versione stabile 1.0.0 a Hacker News, il sito dove il progetto era stato annunciato per la prima volta.cite-ref-5[5]
Sintassi
Quasi ogni cosa in CoffeeScript è un'espressione, per esempio le espressionimwna mwnqif, mwngswitch emwnwformwoa (che non ritornano nessun valore in JavaScript) ritornano un valore. Come in Perl, queste dichiarazioni di controllo hanno anche versioni di suffisso; per esempio, mwoqif può anche essere scritto dopo la dichiarazione condizionale.
Molte parentesi tonde e graffe non necessarie possono essere omesse; per esempio, i blocchi di codice possono essere denotati da indentazione invece che da parentesi graffe, le chiamate delle funzioni sono implicite, e gli object literal sono spesso rilevati automaticamente.
Esempi
Test d'intervallo
Per calcolare l'indice di massa corporea, qualcuno potrebbe scrivere (in JavaScript):
let mass = 72;
let height = 1.78;
const BMI = mass / (height ** 2);
(18.5 < BMI && BMI < 25) && alert('You are healthy!');
Con CoffeeScript l'intervallo è direttamente descritto:
mass = 72
height = 1.78
BMI = mass / height**2
alert 'You are healthy!' if 18.5 < BMI < 25
Cicli e comprensioni
Per calcolare il mwpgmassimo comun divisoremwpw di due interi con l'mwqaalgoritmo di Euclide, in JavaScript c'è bisogno solitamente di un ciclo mwqqwhile:
function gcd(x, y) {
var z
do {
z = x % y
x = y
y = z
} while (y != 0)
return x
}
Mentre in CoffeeScript si può invece usaremw6a mw6quntil e il pattern-matching:
gcd = (x, y) ->
[x, y] = [y, x%y] until y is 0
x
Qualsiasi ciclo mwaq8formwara può essere rimpiazzato da una comprensione di lista; in tal modo per calcolare il quadrato dei numeri dispari positivi più piccoli di dieci (quindi i numeri il quale resto di modulo 2 è 1), si può fare:
alert n*n for n in [1..10] when n%2 is 1
Alternativamente, c'è:
alert n*n for n in [1..10] by 2
Si può implementare una mwaukricerca sequenzialemwauo con unmwaus
names = ["Ivan", "Joanna", "Nikolay", "Mihaela"]
linearSearch = (searchName) -> alert(name) for name in names when name is searchName
La sintassimwaxo mwaxsfor ... in permette di ciclare su array, mentre la sintassimwaxw mwax0for ... of permette di ciclare su oggetti. Si può utilizzare la parola chiavemwax4 mwax8?mwaya per controllare velocemente se una variabile èmwaye mwayinull omwaymundefinedmwayq :
personCheck = ->
if not person? then alert("No person") else alert("Have person")
person = null
personCheck()
person = "Ivan"
personCheck()
Questo codice mostrerà a schermo "No person" se la variabile èmwabi mwabmnull omwabq mwabuundefined e "Have person" se c'è presente qualcosa.
Funzioni e jQuery
Un frammento JavaScript comune utilizzando la libreria jQuery è:
$(document).ready(function() {
// Initialization code goes here
})
Oppure solo:
$(function() {
// Initialization code goes here
})
In CoffeeScript, la parola chiave mwadyfunction è sostituita dal simbolomwadc mwadg->mwadk , e viene usata l'indentazione invece che le parentesi graffe, come in altri linguaggi off-side rulemwads come mwadwPython e mwad0Haskell. Inoltre, le parentesi possono essere generalmente omesse, usando invece il livello d'mwad4indentazione per denotare una funzione o blocco. Quindi, l'equivalente CoffeeScript del frammento sopra è:
$(document).ready ->
# Initialization code goes here
O solo:
$ ->
# Initialization code goes here
Interpolazione di stringhe
L'interpolazione di stringhe in stile Ruby è inclusa in CoffeScript. Le stringhe con doppi apici permettono valori interpolati, usando #{ ... }, e le stringhe con singolo apice sono literal.
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
sentence = "#{ 22 / 7 } is a decent approximation of π"
Compilazione
Il compilatore CoffeeScript è stato scritto in CoffeeScript dalla versione 0.5 ed è disponibile come un'utility mwahoNode.js; comunque, il nucleo del compilatore non si affida a Node.js e può essere eseguito in qualsiasi ambiente JavaScript.cite-ref-6[6]mwah8 Un'alternativa all'utility Node.js è il Plugin Maven Coffee, un plugin per il sistema di build mwaiaApache Maven. Il plugin usa il motore JavaScript Rhino scritto in Java.
Il sito ufficiale CoffeeScript.org ha un bottone "Prova CoffeeScript" nella barra del menu; cliccandolo viene aperta una finestra in cui l'utente può scrivere codice CoffeeScript, vedere l'output JavaScript ed eseguirlo direttamente nel browser. Il sito js2coffeecite-ref-7[7]mwaiy fornisce una traduzione bi-direzionale.
Ultime aggiunte
• La mappa sorgente permette agli utenti di debuggare direttamente il loro codice CoffeeScript, supportando i traceback CoffeeScript su errori runtime.
• CoffeeScript supporta una forma di Literate Programming, usando un'estensionemwaiw mwai0.coffee.md omwai4 mwai8.litcoffee. Questo permette al codice sorgente CoffeeScript di essere scritto in mwajaMarkdown. Il compilatore trattera qualsiasi blocco indentato (il metodo di Markdown di indicare il codice sorgente) com codice, e ignorare il resto come commenti.
Adozione
Il 13 settembre 2012 mwajmDropboxmwajq ha annunciato che i suoi codebase lato browser sono stati riscritti da JavaScript a CoffeeScript.
La guida interna di stile di GitHub una volta disse "scrivi nuovo JS in CoffeeScript", e anche se non lo dice più, tutti i consigli in quella guida di stile si riferiscono a come scrivere un buon CoffeeScript, e il loro editor di testo Atom è anch'esso scritto in quel linguaggio.
Note
cite-note-22. ↑ , Joshua.
cite-note-33. ↑ Eich, Brendan.
cite-note-44. ↑ Github. mwaks'initial commit of the mystery language'
cite-note-55. ↑ Hacker News.
cite-note-66. ↑ mwaliCoffeeScript mwalmArchiviatomwalq il 27 dicembre 2009 in mwaluInternet Archivemwaly..
cite-note-77. ↑ mwalsRico Sta Cruz, mwalwmwal0js2coffee, su mwal4js2.coffee. mwal8URL consultato l'11 maggio 2014.
Bibliografia
• mwammPatrick Lee, CoffeeScript in Action, First, Manning Publications, 14 maggio 2014, p. 432, ISBN 978-1-61729-062-6.
• mwamuGeoffrey Grosenbach, Meet CoffeeScript, First, PeepCode, 12 maggio 2011 (archiviato dall'url originale il 16 giugno 2011).
• mwamcMark Bates, Programming in CoffeeScript, First, Addison-Wesley, 31 maggio 2012, p. 350, ISBN 0-321-82010-X. URL consultato il 12 luglio 2016 (archiviato dall'url originale il 10 giugno 2016).
• mwamkAlex MacCaw, The Little Book on CoffeeScript, First, O'Reilly Media, 31 gennaio 2012, p. 62, ISBN 978-1-4493-2105-5. URL consultato il 30 aprile 2019 (archiviato dall'url originale il 2 gennaio 2012).
• mwamsTrevor Burnham, CoffeeScript: Accelerated JavaScript Development, First, Pragmatic Bookshelf, 3 agosto 2011, p. 138, ISBN 978-1-934356-78-4. URL consultato il 30 aprile 2019 (archiviato dall'url originale il 3 marzo 2019).
Voci correlate
Collegamenti esterni
• Sito ufficiale, su coffeescript.org.
• CoffeeScript, su packages.debian.org.
• Repository sorgenti di CoffeeScript, su github.com.
• citereffree-software-directory(EN) CoffeeScript, su Free Software Directory.
• mwankcoffee-script su GitHub
• mwansRapydScript mwanwArchiviato il 5 aprile 2016 in Internet Archive., un traduttore con una sintassi più Pythonic
• mwan8GorillaScript, che offre controlli di tipi aggiuntivi e zucchero sintattico per pattern JS comuni come callback in linea